package com.htgd.gardenexpo.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.htgd.gardenexpo.dto.DeviceDTO;
import com.htgd.gardenexpo.dto.GeConDeviceMealDTO;
import com.htgd.gardenexpo.entity.CommonResult;
import com.htgd.gardenexpo.entity.GeConSeatMeal;
import com.htgd.gardenexpo.entity.GeConTelescopeMeal;
import com.htgd.gardenexpo.page.RecommendQuery;
import com.htgd.gardenexpo.vo.GeConDeviceMealVO;
import org.springframework.http.ResponseEntity;

import java.util.List;
import java.util.Map;

/**
 * @author: 王秀田
 * @date: 2024/11/19 14:56
 * @description: TODO
 */
public interface DeviceService {

    /**
     * 设备管理端授权登录
     * @return
     */
    String deviceLogin() throws Exception;

    /**
     * 设备小程序端授权登录
     * @return
     */
    Map<String,Object> wxLogin(String code, String openId) throws Exception;

    /**
     * 通过第三方接口查询设备列表
     * @return
     */
    CommonResult<JSONArray> getDeviceList() throws Exception;

    /**
     * 生成设备二维码
     */
    ResponseEntity<byte[]> saveDeviceQrCode(String deviceId, String typeId);

    /**
     * 获取设备详情
     * @return
     */
    JSONObject getDeviceDetails(String deviceId) throws Exception;

    /**
     * 获取设备二维码
     * @param deviceId
     * @return
     */
    byte[] getQrCode(String deviceId);

    /**
     * 查询望眼镜套餐列表
     * @return
     */
    List<GeConTelescopeMeal> getTelescopeMealList();

    /**
     * 查询座椅套餐列表
     * @return
     */
    List<GeConSeatMeal> getSeatMealList();

    /**
     * 确定兑换
     */
    CommonResult<JSONObject> deviceSubmit(DeviceDTO device,String openId) throws Exception;

    /**
     * 给望眼镜设备充值时间
     * @param itemId 项目ID
     * @param num 设备编号
     * @param deviceType 设备类型ID
     * @param payData 时长（秒）
     * @throws Exception
     */
    String setTelescopeTime(Integer itemId,Integer num,Integer deviceType,Integer payData) throws Exception;

    /**
     * 给座椅设备充值时间
     * @param itemId 项目ID
     * @param num 设备编号
     * @param time 时长（秒）
     * @throws Exception
     */
    String setSeatTime(Long itemId, Long num, String time) throws Exception;

    /**
     * 添加设备套餐
     */
    void add(GeConDeviceMealDTO geConDeviceMeal);

    /**
     * 编辑设备套餐
     */
    void update(GeConDeviceMealDTO geConDeviceMeal);

    /**
     * 删除设备套餐
     * @param id 套餐ID
     * @param type 设备类型
     */
    void delete(String id,String type);

    /**
     * 获取设备列表
     * @return
     */
    PageInfo<GeConDeviceMealVO> pageList(RecommendQuery pageBase);

    CommonResult getUseNums(String startTime, String endTime, String deviceType, String deviceCode);

    CommonResult closeDevice(String deviceId, String type);

    CommonResult getTelescopeRemainingTime(String num);

    CommonResult getSeatRemainingTime(String num);
}
